  // 得到一个合法字符的数组(数字 大小写字母 下划线)
  var numList = [];
  for(var i=48;i<=57;i++){
      var char = String.fromCharCode(i); //根据编码返回对应的字符
      numList.push(char);
  }
  console.log(numList);

  var smallList = []; 
  for(var i=97;i<=122;i++){
      var char = String.fromCharCode(i); //根据编码返回对应的字符
      smallList.push(char);
  }
  console.log(smallList);

  var bigList = []; 
  for(var i=65;i<=90;i++){
      var char = String.fromCharCode(i); //根据编码返回对应的字符
      bigList.push(char);
  }
  console.log(bigList);

  var speList = ["_"];// 允许使用的特殊字符的集合

  var normalList = numList.concat(smallList,bigList,speList);
  console.log(normalList);


  function randCode(len){
      len = len == undefined ? 4:len;  //默认值(4)

      var list =  numList.concat(smallList,bigList);
      var arr = []; 
      for(var i=0;i<len;i++){  // 假如 i=2时 随机元素重复
          var index = Math.round(Math.random() * (list.length - 1)); 
          var item = list[index];
          if(arr.indexOf(item)==-1){  // 不存在  => 放
              arr.push(item);   //把随机的元素放到数组中
          }else{ // 存在   => 如果不做任何操作 会少放一次
              //  => 假如 i=2时 随机元素重复 i-- => i=1  本次循环结束  i++ => i=2 (忽略本次,再来一次)
              i--;  // i--   
          }
      }
      console.log(arr);

      return arr.join("");

  }